<?php namespace Framework\Kernel;

// use Home\Controller\IndexController;
// require 'app/Home/Controller/IndexController.php';
class App{

	public function run()
	{
		session_start();
		header("content-type:text/html;charset=utf-8");

		// spl_autoload_register(array($this,'autoload'));
		spl_autoload_register([$this,'autoload']);
		//错误信息处理
		set_error_handler(array($this,                      'error'), E_ALL);
		set_exception_handler(array($this,                  'exception'));

		//引函数库
		require_once('framework/Kernel/functions.php');

		//文件类、控制器、动作
		$m = isset($_GET['m'])?$_GET['m']:'Home';
		$c = isset($_GET['c'])?$_GET['c']:'Index';
		$a = isset($_GET['a'])?$_GET['a']:'index';

		// (new \Home\Controller\IndexController)->index();

		//配置文件
		C(require 'framework/config.php');
		C(require 'app/Common/Conf/config.php');
		C(require 'app/Home/Conf/config.php');

		//转换成常量
		define('MODULE', $m);
		define('CONTROLLER', $c);
		define('ACTION',$a);
		define('IS_POST',!empty($_POST));

		//控制器，在浏览器输出内容
		$class = MODULE.'\\Controller\\'.CONTROLLER.'Controller';
		$obj = new $class;
		$obj->$a();

	}

	//回调函数中的autoload函数,通过这个函数调用各种需要的文件
	public function autoload($class)
	{
		$class = str_replace('\\','/',$class);
		if(substr($class,0,9)=='Framework')
		{
			$file = $class.'.php';
		}
		else{
			$file = 'app/'.$class.'.php';
		}
		require_once $file;
	}

	//自定义异常处理
	public function exception($e)
	{
		$this->savelog($e->getMessage());
		if(DEBUG)
		{
			require 'framework/tpl/exception.php';
		}
		_404();
	}

	//错误处理
	public function error($errno,$error,$file,$line)
	{
		if($errno == E_DEPRECATED){return;}
		
		if(DEBUG)
		{
			require 'framework/tpl/error.html';
		}
		else{
			$erro = date("Y-m-d H:i:s")."File:$file;Error:$error".PHP_EOL;
			$this->savelog($error);
		}
		_404();
	}





	//得到错误信息，存入放错误信息的文件夹
	public function savelog($message)
	{	
		//保存成文件的形式
		$file = 'log/'.date('d').'.log';
		// 把错误信息发送到 web 服务器的错误日志，或者到一个文件里。
		error_log($message,3,$file,null);
	}

}